
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>MyBatis如何实现数据库类型和Java类型的转换的？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>MyBatis如何实现数据库类型和Java类型的转换的？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在MyBatis中，TypeHandler的主要职责是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">TypeHandler的主要职责是处理Java类型和数据库类型之间的转换。它使得MyBatis能够将SQL查询结果映射到Java对象，并将Java对象作为参数设置到SQL语句中，从而实现数据的灵活高效映射。</div>
          </div>
          <div class="card-source">来源: 1. 类型处理器（Type Handlers）概述</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">TypeHandler接口中用于将Java参数设置到PreparedStatement中的方法是什么？其作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">该方法是 `setParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType)`。它的作用是将一个Java类型的参数（parameter）设置到PreparedStatement对象（ps）的指定位置（i）。</div>
          </div>
          <div class="card-source">来源: 2. 如何工作</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">MyBatis是如何处理像String、Integer、Date这类常见数据类型的转换的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">MyBatis提供了一系列默认的类型处理器来自动处理常见Java类型和数据库类型之间的转换，例如使用`StringTypeHandler`处理String类型，`IntegerTypeHandler`处理Integer类型，以及`DateTypeHandler`处理Date类型。</div>
          </div>
          <div class="card-source">来源: 3. 默认类型处理器</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">当需要处理非标准数据类型或自定义转换逻辑时，开发者应如何操作？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">开发者可以创建自定义的类型处理器。这通常通过实现 `TypeHandler` 接口或扩展 `BaseTypeHandler` 类来完成，并在其中重写必要的方法。创建后，还需要在MyBatis的配置文件中注册这个自定义的类型处理器。</div>
          </div>
          <div class="card-source">来源: 4. 自定义类型处理器</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">如何在MyBatis的配置文件中注册一个自定义的TypeHandler？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">在MyBatis配置文件的`<typeHandlers>`标签内，使用`<typeHandler>`标签进行注册。需要指定`handler`属性为自定义处理器的完整类名，并可以通过`javaType`属性关联到特定的Java类型。</div>
          </div>
          <div class="card-source">来源: 4. 自定义类型处理器</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">根据文档，使用MyBatis的TypeHandler能带来哪些具体优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">使用TypeHandler主要有三个优势：1. 类型安全，确保Java类型与数据库类型的一致性；2. 简化映射，自动处理常见数据类型转换，减少手动编码；3. 自定义支持，允许开发者为特殊类型或需求提供自定义的转换逻辑。</div>
          </div>
          <div class="card-source">来源: 5. 使用类型处理器的优势</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
